메모리 관리 장치
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
메모리 관리 장치(MMU)는 가상 주소를 물리 주소로 변환하여 컴퓨터 시스템의 메모리 관리를 담당하는 하드웨어 구성 요소이다. 초기에는 소프트웨어 또는 세그먼테이션 방식을 사용했으나, 외부 단편화 문제를 해결하기 위해 다양한 알고리즘이 개발되었다. 현대 MMU는 페이지 테이블을 사용하여 가상 주소를 물리 주소로 변환하며, 메모리 보호, 외부 단편화 완화 등의 이점을 제공한다. MMU는 CPU 외에도 PCI 장치나 DMA와 같은 장치에서도 활용되며, x86, ARM, PowerPC 등 다양한 아키텍처에서 구현되고 있다. Burroughs B5000과 같은 일부 시스템은 MMU 없이 가상 메모리 및 메모리 보호 기능을 제공하는 대안적인 방식을 사용한다.
더 읽어볼만한 페이지
- 가상 메모리 - 가상 주소 공간
가상 주소 공간은 운영 체제가 프로세스에 제공하는 논리적인 메모리 공간으로, 실제 물리 메모리 주소와 독립적으로 관리되며, 프로세스는 이 공간을 통해 실행 파일, DLL 파일, 페이지 파일 등을 매핑하고 메모리를 할당받는다. - 가상 메모리 - 페이지 테이블
페이지 테이블은 가상 메모리 환경에서 프로세스의 가상 주소를 실제 물리 주소로 변환하는 핵심 자료 구조로서, 운영체제가 매핑 정보를 저장 및 관리하고 메모리 관리 장치가 캐싱하여 주소 변환 속도를 향상시키며, 다단계, 가상화, 역, 중첩 페이지 테이블 등 다양한 구조가 존재한다. - 컴퓨터 하드웨어 - 하드웨어 가속
하드웨어 가속은 성능 향상을 위해 특정 연산을 전용 하드웨어로 처리하는 기술이며, 병렬 처리를 통해 연산 속도를 높이지만 유연성이 감소하고 비용이 증가하는 특징을 갖는다. - 컴퓨터 하드웨어 - 메인보드
메인보드는 컴퓨터의 핵심 부품들을 연결하여 시스템 작동을 가능하게 하는 인쇄 회로 기판으로, CPU, 메모리, 칩셋, 확장 슬롯 등을 포함하며 펌웨어를 통해 하드웨어를 초기화하고 운영체제 부팅을 관리한다.
메모리 관리 장치 | |
---|---|
개요 | |
![]() | |
유형 | 하드웨어 |
기능 | 가상 주소를 물리 주소로 변환 |
역할 및 기능 | |
주요 기능 | 가상 메모리 관리 메모리 보호 주소 변환 (가상 주소 → 물리 주소) |
가상 메모리 | 실제 물리 메모리 크기보다 더 큰 주소 공간을 제공하여 프로그램이 더 많은 메모리를 사용하는 것처럼 보이게 함. |
메모리 보호 | 각 프로세스가 자신의 메모리 영역에만 접근하도록 제한하여 다른 프로세스나 운영 체제의 영역을 침범하는 것을 방지. |
주소 변환 | CPU가 사용하는 가상 주소를 실제 메모리 위치를 나타내는 물리 주소로 변환. |
부가 기능 | 캐시 관리 버스 중재 메모리 뱅크 전환 |
작동 방식 | |
주소 변환 과정 | CPU가 가상 주소를 MMU로 전달하면, MMU는 페이지 테이블이나 세그먼트 테이블과 같은 자료 구조를 사용하여 해당 가상 주소에 대한 물리 주소를 찾음. |
페이지 테이블 | 가상 주소를 물리 주소로 매핑하는 테이블. 각 항목은 페이지 번호와 해당 페이지가 위치한 물리 메모리의 프레임 번호를 포함. |
TLB (Translation Lookaside Buffer) | 최근에 변환된 주소 정보를 저장하는 캐시. MMU는 먼저 TLB를 검색하여 주소 변환 속도를 높임. |
페이지 폴트 (Page Fault) | 가상 주소에 해당하는 페이지가 물리 메모리에 없는 경우 발생하는 인터럽트. 운영 체제는 페이지 폴트 처리기를 호출하여 디스크에서 해당 페이지를 가져와 물리 메모리에 로드. |
메모리 보호 메커니즘 | MMU는 각 페이지 또는 세그먼트에 대한 접근 권한 (읽기, 쓰기, 실행)을 설정하여 메모리 보호를 수행. CPU가 허가되지 않은 접근을 시도하면 MMU는 예외를 발생시켜 운영 체제가 처리. |
역사 | |
초기 시스템 | 초기 시스템에서는 간단한 형태의 주소 변환 및 메모리 보호 기능 제공. |
발전 | 가상 메모리 및 메모리 보호 기능이 더욱 발전하면서 MMU는 복잡한 주소 변환 체계 및 다양한 메모리 관리 기법을 지원하게 됨. |
현대 시스템 | 현대 시스템에서는 MMU가 CPU 내부에 통합되거나 별도의 칩으로 구현되어 고성능 메모리 관리 기능 제공. |
활용 분야 | |
운영 체제 | 가상 메모리, 메모리 보호, 프로세스 격리 등 핵심 기능 지원. |
임베디드 시스템 | 제한된 자원 환경에서 효율적인 메모리 관리 및 실시간 성능 보장. |
고성능 컴퓨팅 | 대규모 데이터 처리 및 복잡한 연산을 위한 메모리 관리 기능 제공. |
가상화 기술 | 여러 가상 머신이 독립적으로 실행될 수 있도록 메모리 격리 및 보호 기능 제공. |
2. 역사
초기 마이크로프로세서 설계에서 메모리 관리 장치(MMU)는 독립된 집적 회로였다. 예를 들어, 매킨토시 II의 MC68020 CPU는 MC68851 MMU를 사용했고, Z8000 패밀리에서는 Z8010이 사용되었다. 그 후의 CPU인 MC68030이나 Z280에서는 마이크로프로세서 내에 MMU를 내장하고 있다.
1990년대 이후의 전형적인 MMU에서는 일반적으로 메모리 공간(주소 공간)을 페이지로 분할한다. 페이지의 크기는 2N이며, 대개 수 K바이트이다. CPU가 출력하는 주소 하위 N비트(페이지 내 오프셋)는 가상 주소를 물리 주소로 변환할 때 변하지 않는다. CPU가 출력하는 주소 상위 비트는 가상 페이지 번호이다. 페이지 테이블은 배열 구조로 되어 있으며, 가상 페이지 번호가 그 인덱스이다. 각 페이지 테이블 엔트리(PTE)는 가상 페이지 번호(해당 PTE의 인덱스)에 대응하는 물리 페이지 번호를 저장하고 있다. 이 물리 페이지 번호와 페이지 내 오프셋을 조합하여 완전한 물리 주소를 만들어낸다.
PTE에는 일반적으로 다음과 같은 정보가 포함되어 있다.
- 해당 페이지에 이전에 쓰기가 있었는지 여부
- 마지막으로 액세스된 시점 (페이지 교체 알고리즘에서 사용)
- 특권 레벨별 액세스 권한
- 해당 페이지에 액세스했을 때 캐시 메모리에 내용을 복사할지 여부
어떤 가상 페이지에 대해 물리 메모리(RAM)가 대응하지 않는 경우도 있다. 그 경우, MMU는 "페이지 폴트"를 CPU에 알린다. 운영체제(OS)는 그 알림을 받아, 비어 있는 물리 페이지를 찾아, PTE의 내용을 해당 물리 페이지를 가리키도록 갱신한다. 만약, 빈 메모리가 없는 경우, 사용 중인 페이지에서 (어떤 교체 알고리즘을 사용하여) 물리 페이지를 선택하고, 그 내용을 디스크에 써서 대피시키고, 해당 페이지를 사용한다(필요하다면 디스크에서 내용을 복귀시킨다). 이를 페이징 방식이라고 한다. 페이지 테이블 자체도 메모리 상에 존재하므로, PTE가 존재하지 않는 경우도 있으며, 그 경우도 OS와 MMU가 협력하여 새롭게 페이지 테이블을 할당한다.
MMU는 메모리 단편화에 대해서도 유효하다. 메모리 블록의 할당과 해제가 반복되면, 비어 있는 메모리가 충분히 있어도, 크고 연속적인 블록을 할당할 수 없게 된다. 가상 메모리에서는, 쪼개진 물리 페이지를 모아 연속적인 가상 공간을 만들 수 있다.
이 항목에서는 최근의 페이징 방식을 사용하는 MMU에 대해 해설했지만, MMU에는 세그먼트 방식이나 다른 방식을 사용하는 것도 있다. 그리고 그것은 현재의 마이크로프로세서에도 남아 있다. x86 계열의 마이크로프로세서는 페이징뿐만 아니라 세그먼트 방식도 제공하고 있다.[2]
3. 작동 원리
현대적인 메모리 관리 장치(MMU)는 가상 주소 공간을 페이지 단위로 관리하며, 각 페이지는 보통 2의 거듭제곱 크기(몇 킬로바이트 또는 그 이상)를 가진다.[3] 프로그램은 컴퓨터 고유 주소 크기(32비트 또는 64비트)를 사용하며, 주소의 하위 비트(페이지 내 오프셋)는 변경되지 않고 상위 비트는 가상 페이지 번호가 된다.[3]
MMU는 페이지 테이블을 사용하여 가상 페이지 번호를 물리 페이지 번호로 매핑한다. 페이지 테이블은 메모리 내에 존재하며, 각 가상 페이지마다 하나의 페이지 테이블 항목(PTE)을 가진다.[11] 가상 페이지 번호는 페이지 테이블의 인덱스로 사용될 수 있으며, 더 세분화될 수도 있다. 물리 페이지 번호는 페이지 오프셋과 결합하여 완전한 물리 주소를 형성한다.[3]
PTE에는 페이지가 쓰여졌는지(''Dirty bit''), 마지막으로 사용된 시기(''Accessed bit''), 읽기/쓰기 권한, 캐싱 여부 등의 정보가 포함될 수 있다.[7]
MMU는 가상 주소를 물리 주소로 변환하는 기능(즉, 가상 메모리 관리) 외에도, 메모리 보호 기능, 캐시 제어, 버스 중재 등의 기능을 수행한다.
특정 가상 페이지에 실제 RAM(Random-access memory, 임의 접근 메모리)이 할당되지 않은 경우, MMU는 페이지 폴트를 CPU에 알린다.[7] 운영 체제(OS)는 비어 있는 RAM 프레임을 찾아 페이지 맵을 설정하거나, 페이징을 통해 기존 페이지를 디스크에 저장하고 필요한 페이지를 불러온다. 일부 MMU에서는 PTE가 부족할 수도 있으며, OS는 새 매핑을 위해 PTE를 해제해야 한다.[7][3]
MMU는 불법적인 메모리 접근에 대해 불법 접근 오류 또는 유효하지 않은 페이지 폴트를 발생시켜, 운영 체제가 세그멘테이션 오류 또는 버스 오류 조건을 처리하도록 한다.
초기 마이크로프로세서 설계에서 MMU는 독립된 집적 회로였으나, 이후 CPU에 내장되었다. MMU는 메모리 단편화에도 유효하다. 가상 메모리에서는 쪼개진 물리 페이지를 모아 연속적인 가상 공간을 만들 수 있다.
이 항목에서는 페이징 방식을 사용하는 MMU를 주로 다루지만, 세그먼트 방식 등 다른 방식을 사용하는 MMU도 있으며, 이는 현재 마이크로프로세서에도 남아있다. x86 계열 마이크로프로세서는 페이징과 세그먼트 방식을 모두 제공한다.
3. 1. 페이지 테이블
현대적인 메모리 관리 장치(MMU)는 가상 주소 공간(프로세서가 사용하는 주소 범위)을 페이지로 나눈다. 각 페이지의 크기는 보통 2의 거듭제곱이며, 몇 킬로바이트 정도이지만 더 클 수도 있다. 프로그램은 컴퓨터 고유의 주소 크기(일반적으로 32비트 또는 64비트)를 사용하여 메모리를 참조한다. 주소의 하위 비트(페이지 내 오프셋)는 변경되지 않으며, 상위 비트는 가상 페이지 번호이다.[3]대부분의 MMU는 페이지 테이블이라고 하는 메모리 내 테이블을 사용하여 가상 페이지 번호를 실제 페이지 번호에 매핑한다. 각 가상 페이지마다 하나의 페이지 테이블 항목(PTE)이 있다. 다단계 페이지 테이블은 페이지 테이블 크기를 줄이기 위해 자주 사용된다. PTE의 연관 캐시를 TLB(Translation Lookaside Buffer, 변환 색인 버퍼)라고 하며, 가상 주소가 매핑될 때마다 주 메모리에 접근할 필요를 줄여준다.[11]
가상 페이지 번호는 페이지 테이블 등의 인덱스로 사용될 수 있으며, 더 세분화될 수도 있다. 특정 레벨의 비트를 하위 레벨 테이블의 인덱스로 사용하여 두 개 이상의 인덱싱 레벨을 가질 수 있다.
물리 페이지 번호는 페이지 오프셋과 결합되어 완전한 물리 주소를 제공한다.[3]
페이지 테이블 항목에는 페이지가 쓰여졌는지(''Dirty bit''), 마지막으로 사용된 시기(''Accessed bit'', LRU(Least Recently Used, 최소 사용) 페이지 교체 알고리즘의 경우), 어떤 프로세스(사용자 모드 또는 감독자 모드)가 읽고 쓸 수 있는지, 캐시되어야 하는지 등의 정보가 포함될 수 있다.[7]
특정 가상 페이지에 실제 RAM(Random-access memory, 임의 접근 메모리)이 할당되지 않아 접근이 금지될 수 있다. 이 경우 MMU는 페이지 폴트를 CPU에 알린다. 운영 체제(OS)는 RAM의 여유 프레임을 찾아 요청된 가상 주소에 매핑하도록 페이지 맵을 설정한다. 사용 가능한 RAM이 없으면, 페이징 과정에서 일부 교체 알고리즘을 사용하여 기존 페이지(희생자)를 디스크에 저장해야 할 수도 있다. 일부 MMU에서는 PTE가 부족할 수 있으며, OS는 새 매핑을 위해 PTE를 하나 해제해야 한다.[7][3]
1990년대 이후의 전형적인 MMU는 메모리 공간(주소 공간)을 페이지로 분할한다. 페이지 크기는 2N이며, 보통 수 K바이트이다. CPU가 출력하는 주소 하위 N비트(페이지 내 오프셋)는 변환 과정에서 변하지 않는다. CPU 주소 상위 비트는 가상 페이지 번호이다. 페이지 테이블은 배열 구조이며, 가상 페이지 번호가 인덱스이다. 각 PTE는 가상 페이지 번호(해당 PTE의 인덱스)에 대응하는 물리 페이지 번호를 저장하며, 물리 페이지 번호와 페이지 내 오프셋을 조합하여 완전한 물리 주소를 만든다.
PTE에는 일반적으로 다음과 같은 정보가 포함된다(CPU 아키텍처에 따라 다를 수 있음):
- 해당 페이지에 이전에 쓰기가 있었는지 여부
- 마지막으로 액세스된 시점(페이지 교체 알고리즘에서 사용, 정확한 시각은 아님)
- 특권 레벨별 액세스 권한(특권/사용자 모드에서 읽기/쓰기/실행 가능/불가능 설정)
- 해당 페이지에 액세스했을 때 캐시 메모리에 내용을 복사할지 여부
CPU 아키텍처에서 PTE 기능이 부족하면 소프트웨어가 보완한다. 소프트웨어 설계 자유도 확보나 하드웨어 간소화에 따른 효율 향상을 위해 CPU 기능을 줄이는 경우도 있다.
가상 페이지에 물리 메모리(RAM)가 대응하지 않는 경우, MMU는 "페이지 폴트"를 CPU에 알린다. 운영체제(OS)는 빈 물리 페이지를 찾아 PTE 내용을 갱신한다. 페이지 폴트 처리 후 원래 프로그램으로 복귀하면 폴트를 발생시킨 명령을 다시 실행하고, PTE가 물리 페이지를 가리키므로 정상 처리된다. 빈 메모리가 없으면 사용 중인 페이지에서 물리 페이지를 선택, 내용을 디스크에 대피시키고 해당 페이지를 사용한다(페이징 방식). 페이지 테이블 자체도 메모리에 있으므로 PTE가 없을 수 있으며, OS와 MMU가 협력하여 페이지 테이블을 새로 할당한다.
3. 2. TLB (Translation Lookaside Buffer)
TLB(Translation Lookaside Buffer, 변환 색인 버퍼)는 최근에 사용된 가상 페이지와 물리 페이지 간 변환 정보를 저장하는 캐시이다.[11] MMU는 가상 주소를 물리 주소로 변환하기 위해 페이지 테이블을 사용하는데, 이 페이지 테이블은 주 메모리에 존재한다. TLB는 이 페이지 테이블의 일부 내용을 캐싱하여, 빈번하게 접근하는 페이지에 대한 주소 변환 속도를 높인다.CPU가 가상 주소를 사용하여 메모리에 접근하려고 할 때, MMU는 먼저 TLB에서 해당 가상 페이지에 대한 변환 정보를 찾는다. 만약 TLB에서 변환 정보를 찾으면(TLB hit), 바로 물리 주소를 얻어 메모리에 접근한다. TLB에서 변환 정보를 찾지 못하면(TLB miss), MMU는 주 메모리에 있는 페이지 테이블을 참조하여 변환 정보를 가져와야 한다.[11] 이 과정은 TLB hit보다 시간이 더 오래 걸린다. 가져온 변환 정보는 TLB에 저장되어, 다음에 같은 가상 페이지에 접근할 때 빠르게 변환할 수 있도록 한다.
최근 시스템에서는 메모리를 4 KiB부터 64 KiB의 페이지로 분할하며, 최대 2 MiB부터 1 GiB의 거대한 페이지도 사용할 수 있다.
3. 3. 페이지 폴트
MMU는 페이지 폴트를 CPU에 알린다. 운영 체제(OS)는 그 알림을 받아, 비어 있는 물리 페이지를 찾아 PTE의 내용을 해당 물리 페이지를 가리키도록 갱신한다.[7] 페이지 폴트 처리에서 원래 프로그램으로 복귀하면 폴트를 발생시킨 명령을 다시 실행하고, 이번에는 PTE가 물리 페이지를 가리키므로 정상적으로 처리가 진행된다.만약 빈 메모리가 없는 경우, 사용 중인 페이지에서 (어떤 교체 알고리즘을 사용하여) 물리 페이지를 선택하고, 그 내용을 디스크에 써서 대피시키고, 해당 페이지를 사용한다(필요하다면 디스크에서 내용을 복귀시킨다). 이를 페이징 방식이라고 한다.[7] 페이지 테이블 자체도 메모리 상에 존재하므로, PTE가 존재하지 않는 경우도 있으며, 그 경우도 OS와 MMU가 협력하여 새롭게 페이지 테이블을 할당한다.
페이지 폴트는 때때로 소프트웨어의 버그에 의해 발생하기도 한다.
4. 이점
MMU(메모리 관리 장치)는 여러 이점을 제공하여 현대 컴퓨터 시스템의 핵심적인 구성 요소로 자리 잡았다. 주요 이점은 다음과 같다.
- 메모리 보호: MMU는 각 프로세스에 독립적인 가상 주소 공간을 제공한다.[3] 이는 한 프로세스에서 발생한 오류가 다른 프로세스에 영향을 미치는 것을 방지하여 시스템의 안정성을 높인다. 예를 들어, 특정 프로그램이 잘못된 메모리 영역에 접근하려 할 때, MMU는 이를 감지하고 세그멘테이션 오류 또는 버스 오류를 발생시켜 운영체제가 적절한 조치를 취하도록 한다.[3]
- 가상 메모리: MMU를 사용하면 실제 물리 메모리보다 큰 가상 메모리 공간을 사용할 수 있다.[3] 이는 메모리 부족 문제를 완화하고 더 많은 프로그램을 동시에 실행할 수 있게 한다. 가상 주소는 페이지 테이블을 통해 물리 주소로 변환되며, 필요한 경우 페이징 기법을 통해 일부 데이터를 디스크에 저장하고 불러오는 방식으로 메모리 공간을 효율적으로 활용한다.[3]
- 메모리 단편화 완화: MMU는 페이지 단위로 메모리를 관리하여 외부 단편화 문제를 완화한다.[7] 메모리 블록이 할당 및 해제되는 과정에서 발생하는 빈 공간들을 페이징을 통해, 여러 개의 비연속적인 물리적 메모리 블록들을 연속적인 가상 주소 범위로 묶어서, 외부 단편화 문제를 해결하여 메모리 사용 효율을 높인다.[7] 다만, 페이지 매핑은 프로그램이 페이지에 깔끔하게 매핑되지 않는 메모리 블록을 요청할 때 내부 단편화를 유발한다. 예를 들어 프로그램이 1KB 버퍼를 요청하는 경우, 페이지 중 1KB만 사용되더라도 전체 페이지가 할당된다. 페이지가 1KB보다 크면 페이지의 나머지는 낭비된다. 이러한 작은 할당이 많이 이루어지면, 많은 부분이 비어 있음에도 불구하고 메모리가 소모될 수 있다.[11]
- 효율적인 메모리 관리: MMU는 운영체제가 메모리를 효율적으로 관리하고, 프로세스 간에 메모리를 공유할 수 있도록 돕는다. 페이지 테이블 항목(PTE)은 페이지의 상태(예: 쓰기 여부, 최근 사용 여부), 접근 권한, 캐싱 여부 등 다양한 정보를 포함하여 운영체제가 메모리를 최적으로 관리할 수 있도록 지원한다.[7]
5. 단점
MMU는 가상 주소 공간을 페이지로 나누어 관리하는데, 이 페이지의 크기가 프로그램이 실제로 필요로 하는 메모리 크기보다 클 경우 문제가 발생할 수 있다. 이 경우, 페이지 내부에서 사용되지 않는 공간이 발생하여 메모리 낭비, 즉 내부 단편화가 발생한다.[2]
가상 주소 공간이 클 경우, 페이지 테이블의 크기가 커져 메모리 오버헤드가 발생할 수 있다. 다단계 페이지 테이블을 사용하여 이 문제를 완화할 수 있다.[11]
MMU를 통한 주소 변환 과정은 추가적인 시간이 소요되므로, 성능 저하를 유발할 수 있다. TLB를 사용하여 이 오버헤드를 줄일 수 있다.[11]
6. 다양한 시스템에서의 MMU
ARM 아키텍처 프로세서에는 ARM의 가상 메모리 시스템 아키텍처를 기반으로 한 MMU가 구현되어 있다. 현재 아키텍처는 4KiB와 64KiB의 페이지, 1MiB 섹션, 16MiB 슈퍼섹션을 규정하고 있으며, 구형 시스템에서는 1KiB의 타이니 페이지도 있었다. 페이지 테이블은 4KiB와 64KiB의 경우 2단계, 1MiB 또는 16MiB 섹션일 때는 1단계를 사용한다.[33] TLB 갱신은 페이지 워크 시 자동으로 이루어진다. PTE는 읽기/쓰기 권한, 캐시 대상 여부, NX 비트, non-secure 비트 등의 정보를 포함한다.[33]
DEC 알파 프로세서는 메모리를 8KB, 16KB, 32KB 또는 64KB 페이지로 분할하며, 페이지 크기는 프로세서에 따라 다르다.[20][21] TLB 미스 발생 시, 하위 레벨 펌웨어 기계 코드 (PAL코드)가 페이지 테이블을 탐색한다. OpenVMS AXP PAL코드와 DEC OSF/1 PAL코드는 3단계 트리 구조의 페이지 테이블을 탐색하며, 주소는 다음과 같이 나뉜다.
- 사용되지 않는 비트 집합 (트리의 루트 레벨 인덱스 최상위 비트와 동일한 값 포함)
- 트리의 루트 레벨 인덱싱 비트 집합
- 트리의 중간 레벨 인덱싱 비트 집합
- 트리의 리프 레벨 인덱싱 비트 집합
- 페이지 내 바이트 인덱싱 (수정 없이 물리적 주소로 전달)
필드 크기는 페이지 크기에 따라 다르며, 세 개의 트리 인덱스 필드는 모두 동일한 크기이다.[20][21] OpenVMS AXP PAL코드는 사용자, 슈퍼바이저, 실행, 커널 모드에 대해 전체 읽기/쓰기 권한 비트를 지원하며, 읽기/쓰기/실행 시 오류 발생 비트도 지원한다.[20] DEC OSF/1 PAL코드는 사용자 및 커널 모드에 대해 전체 읽기/쓰기 권한 비트를 지원하며, 읽기/쓰기/실행 시 오류 발생 비트도 지원한다.[21]
MIPS 아키텍처는 TLB에 1개에서 64개의 항목을 지원하며, TLB 항목 수는 CPU 구성에 따라 달라진다. TLB 항목은 이중으로, 각 항목은 가상 페이지 번호(VPN2)를 두 개의 페이지 프레임 번호(PFN0 또는 PFN1) 중 하나에 매핑한다. 각 TLB 항목은 4KiB에서 1GiB까지 4의 배수로 자체 페이지 크기를 가질 수 있다.[34] 각 PFN에는 캐싱 속성, 더티 비트, 유효 상태 비트가 포함된다. VPN2는 전역 상태 비트와 OS에서 할당한 ID를 가지며, 전역 상태 비트가 0으로 설정된 경우 가상 주소 TLB 항목 일치에 참여한다.[34] TLB 관련 예외는 다음과 같다.
- TLB 재충전 예외: 매핑된 가상 주소와 일치하는 항목이 TLB에 없을 때 발생
- TLB 무효 예외: 일치하는 항목이 있지만 무효로 표시된 경우 발생
- TLB 수정 예외: 저장 명령어가 매핑된 주소를 참조하고, 일치하는 항목의 더티 상태가 설정되지 않은 경우 발생
TLB 예외 처리 중 TLB 예외가 발생하면 이중 오류 TLB 예외가 자체 예외 처리기로 전송된다. MIPS32 및 MIPS32r2는 32비트 가상 주소 공간과 최대 36비트 물리적 주소 공간을 지원하며, MIPS64는 최대 64비트 가상 주소 공간과 최대 59비트 물리적 주소 공간을 지원한다. MIPS 아키텍처의 MMU는 실질적으로 TLB 기능만 담당하며, OS가 직접 TLB를 수정한다.[34] 페이지 테이블 구조는 규정되어 있지 않으므로, OS는 TLB 미스에 따른 페이지 폴트 페널티를 줄이는 조건 하에 자체 메모리 모델에 최적화된 페이지 테이블 설계를 채택할 수 있다. 또한, TLB 항목에서 OS 프로세스(실질적으로 주소 공간)를 가져오기 위한 지원 기능이 처음부터 제공된다.[34]
PowerPC에서 페이지는 일반적으로 4KiB이다. TLB 미스 발생 시, 표준 PowerPC MMU는 두 번의 참조를 동시에 수행한다. 하나는 데이터와 코드별로 4개 또는 8개 있는 Block Address Translation(BAT) 레지스터가 가리키는 주소 범위인지 참조하는 것이다. BAT 레지스터는 최대 256MiB의 연속적인 메모리를 매핑하며, OS가 커널 자체를 매핑하는 데 자주 사용된다. BAT 참조가 성공하면 다른 참조는 중단되고 무시된다.[16] 다른 참조는 모든 프로세서에서 지원되는 것은 아니지만, 역 페이지 테이블을 참조한다. 먼저, 가상 주소 상위 4비트로 16개의 세그먼트 레지스터 중 하나를 선택한다. 세그먼트 레지스터의 24비트 값을 가상 주소 상위 4비트와 교체하여 52비트 주소를 생성한다. 세그먼트 레지스터를 사용하면 여러 프로세스가 하나의 해시 테이블을 사용할 수 있다.[16]
52비트 주소는 해시되어 칩 외부 테이블의 인덱스로 사용된다. 여기서 8개의 페이지 테이블 엔트리가 일치하는지 확인한다. 해시 충돌로 인해 일치하는 항목을 찾을 수 없으면 프로세서는 해시 함수를 약간 변경하여 다시 시도한다. 그래도 일치하는 항목을 찾을 수 없으면 CPU는 (MMU를 비활성화한 다음) OS에 예외(트랩)를 통지하고 처리를 요청한다. OS는 해시 테이블에서 하나의 엔트리를 삭제하여 공간을 만들고 새로운 엔트리를 넣는다. 새로운 엔트리는 일반적인 트리 구조의 페이지 테이블을 참조하거나, 속도는 느리지만 메모리 효율이 좋은 방식으로 더 근본적인 메모리 관리 데이터 구조를 따라 얻을 수 있다. NX 비트 제어 지원은 세그먼트 레지스터에서 수행되므로 256MiB 단위가 된다.[16] 이 방식은 해시 함수를 사용하기 때문에 캐시의 지역성이 떨어진다는 문제가 있다. 트리 구조 페이지 테이블에서는 가상 주소상 가까운 엔트리가 가까운 위치에 배치된다. PowerPC에서 OS는 이 문제의 영향을 줄이기 위해 가능한 한 해시 테이블 크기를 작게 유지해야 한다.[16]
x86 CPU는 기본적으로 메모리를 4KB 페이지로 나눈다. 구형 8088 및 80286 MMU 설계의 기본 요소였던 세그먼트 레지스터는 최신 OS에서는 사용되지 않지만, 예외적으로 FS 및 GS 레지스터가 애플리케이션의 스레드별 데이터 또는 OS 커널의 CPU별 데이터 접근에 사용된다. 모든 메모리 접근은 실행 중인 코드에 따라 선택된 세그먼트 레지스터를 포함한다. 세그먼트 레지스터는 가상 주소에 더해질 오프셋을 제공하는 테이블의 색인 역할을 한다. OS는 FS 또는 GS를 사용하는 경우를 제외하고 오프셋이 0이 되도록 보장한다.[16] 오프셋이 추가된 후 주소는 32비트를 초과하지 않도록 마스크된다. 결과는 트리 구조 페이지 테이블을 통해 조회되며, 주소 비트는 트리의 분기에 10비트, 분기의 리프에 10비트, 가장 낮은 12비트는 결과에 직접 복사되는 방식으로 분할된다. W^X 기능을 갖춘 OpenBSD 및 Exec Shield 또는 PaX 패치가 적용된 Linux와 같은 일부 운영 체제는 CS 레지스터에 의해 지정된 코드 세그먼트 길이를 제한하여 주소 공간의 수정 가능한 영역에서 코드 실행을 허용하지 않을 수도 있다.
펜티엄 MMU는 트리의 최하위 레벨을 건너뛰어 4MB 페이지를 허용하도록 변경되었다. 페이지 계층 구조의 첫 번째 레벨을 인덱싱하는 데 10비트가 남고 나머지 10+12비트가 결과에 직접 복사된다. 펜티엄 프로 MMU는 물리 주소 확장(PAE) 기능을 도입, 3단계 페이지 테이블에 2+9+9비트를 사용하고 가장 낮은 12비트를 직접 복사하여 36비트 물리 주소를 사용할 수 있게 했다. 2MB 크기의 큰 페이지도 트리의 최하위 레벨을 건너뛰어 사용할 수 있다(2단계 테이블 계층 구조에 2+9비트 사용, 나머지 9+12비트 직접 복사). 또한 페이지 속성 테이블을 통해 작은 CPU 내 테이블에서 몇 개의 높은 비트를 조회하여 캐시 가능성을 지정할 수 있다.
실행 불가 지원은 원래 세그먼트별로만 제공되어 사용하기 불편했다. 최신 x86 칩은 PAE 모드에서 페이지별 실행 불가 비트를 제공한다. W^X, Exec Shield, PaX 메커니즘은 NX 비트가 없는 x86 프로세서에서 코드 세그먼트 길이를 설정하여 페이지별 실행 불가 지원을 에뮬레이션하며, 이로 인해 성능 저하와 사용 가능한 주소 공간 감소가 발생한다.[17]
x86-64는 x86의 64비트 확장으로, 세그먼테이션을 거의 완전히 제거하고 플랫 메모리 모델을 사용한다. FS와 GS 세그먼트 레지스터를 제외한 나머지 세그먼트 레지스터는 오프셋이 0으로 설정되어 무시된다.[17] 페이지 테이블은 4단계로 구성된다. 상위 비트부터 16비트는 미사용, 9비트씩 각 계층의 인덱스, 나머지 12비트는 물리 주소의 하위 12비트가 된다. 미사용 16비트는 하위 48비트를 부호 확장한 것이다. 4KB 페이지를 사용하는 경우 4단계 페이지 테이블을 사용하며, 2MB 페이지를 사용하는 경우에는 3단계, 1GB 페이지를 사용하는 경우에는 2단계 페이징을 사용할 수 있다. 페이지 테이블 항목에는 NX 비트가 지원된다.[16]
6. 1. IBM System/360 Model 67, IBM System/370 및 후속 제품
IBM System/360 Model 67은 1965년 8월에 출시되었으며, 동적 주소 변환(DAT) 박스라고 불리는 메모리 관리 장치(MMU)를 포함했다.[16][17] 이 MMU는 접근 비트와 변경 비트를 페이지 테이블 외부에 저장하는 특이한 기능을 가지고 있었다. (모든 S/360 프로세서의 4비트 보호 키와 함께). 이 비트들은 가상 메모리가 아닌 물리 메모리를 참조하며, 특수 목적 명령어로 접근된다.[17] 이는 운영 체제(OS)의 오버헤드를 줄여주는데, 그렇지 않다면 OS는 접근 비트와 변경 비트를 페이지 테이블에서 보다 물리적인 데이터 구조로 전파해야 하기 때문이다. 이는 나중에 반가상화라고 불린 OS 수준 가상화를 더 쉽게 만든다.IBM System/370은 1972년 8월부터 시작되었는데, 유사한 MMU를 가지고 있었지만, 초기에는 System/360 Model 67의 32비트 가상 주소 공간이 아닌 24비트 가상 주소 공간만 지원했다. System/370 또한 접근 비트와 변경 비트를 페이지 테이블 외부에 저장했다. 1983년 초, System/370-XA 아키텍처는 가상 주소 공간을 31비트로 확장했으며, 2000년에는 64비트 z/아키텍처가 도입되어 주소 공간이 64비트로 확장되었다. 이들도 접근 비트와 변경 비트를 페이지 테이블 외부에 계속 저장한다.
System/370과 그 후속 아키텍처들은 접근 비트와 더티 비트를 페이지 테이블 외부에 저장하는 특이한 방식을 사용한다. 이 비트들은 가상 주소가 아닌 물리 주소에 대응되며, 특수한 명령어로 접근할 수 있다. 이러한 방식은 가상화를 용이하게 해주었다. 또한, OS가 페이지 테이블에 있는 이러한 비트를 물리 메모리에 대응하는 다른 데이터 구조로 복사하는 등의 처리가 불필요하게 되어 OS의 오버헤드를 줄여준다.
6. 2. VAX
VAX 페이지는 512바이트[18]로 매우 작다. 운영 체제는 여러 페이지를 단일 더 큰 페이지인 것처럼 처리할 수 있다. 예를 들어 VAX의 리눅스는 8개의 페이지를 함께 그룹화하여 4KB 페이지를 갖는 것으로 간주된다. VAX는 메모리를 4개의 고정 목적 영역으로 나누며, 각 영역의 크기는 1GiB이다.[18] 각 영역은 다음과 같다:[18]- P0 공간: 힙과 같은 범용 프로세스별 메모리에 사용된다.
- P1 공간 (또는 제어 공간): 프로세스별로 사용되며 일반적으로 감독자, 집행자, 커널, 사용자 스택 및 운영 체제에서 관리하는 기타 프로세스별 제어 구조에 사용된다.
- S0 공간 (또는 시스템 공간): 모든 프로세스에 전역적으로 적용되며 페이지화되었는지 여부에 관계없이 페이지 테이블을 포함하여 운영 체제 코드와 데이터를 저장한다.
- S1 공간: 사용되지 않으며 "디지털에 예약되어 있다."[18]
페이지 테이블은 큰 선형 배열이다.[18] 일반적으로 주소가 가능한 범위의 양쪽 끝에서 사용될 때 이는 매우 낭비적일 수 있지만, P0 및 P1 공간에 대한 페이지 테이블은 페이지화된 S0 공간에 저장된다.[18] 따라서 효과적으로 2단계 트리가 있어, 응용 프로그램이 사용되지 않는 페이지 테이블 항목에 많은 공간을 낭비하지 않고도 희소 메모리 레이아웃을 가질 수 있다. 대부분의 MMU의 페이지 테이블 항목과 달리, VAX MMU의 페이지 테이블 항목에는 접근 비트가 없다.[18] 페이징을 구현하는 운영 체제는 효율적으로 작동하려면 접근 비트를 에뮬레이션할 수 있는 방법을 찾아야 한다. 일반적으로 운영 체제는 페이지를 주기적으로 언맵하여 페이지 부재 오류를 사용하여 운영 체제가 접근 비트를 설정할 수 있도록 한다.
6. 3. ARM
ARM 아키텍처 프로세서는 ARM의 가상 메모리 시스템 아키텍처를 기반으로 MMU가 구현되어 있다. 현재 아키텍처는 4KiB와 64KiB의 페이지, 1MiB 섹션, 16MiB 슈퍼섹션을 규정하고 있다. 구형 시스템에서는 1KiB의 타이니 페이지도 있었다. 4KiB와 64KiB의 경우 2단계, 1MiB 또는 16MiB 섹션일 때는 1단계 페이지 테이블을 사용한다.[33]TLB의 갱신은 페이지 워크 시에 자동으로 갱신된다.
PTE는 읽기/쓰기 권한, 캐시 대상 여부, NX 비트, non-secure 비트 등의 정보를 가진다.[33]
6. 4. DEC Alpha
DEC 알파 프로세서는 메모리를 8KB, 16KB, 32KB 또는 64KB 페이지로 분할하며, 페이지 크기는 프로세서에 따라 다르다.[20][21] TLB 미스 후, 하위 레벨 펌웨어 기계 코드 (PAL코드라고 함)는 페이지 테이블을 탐색한다.OpenVMS AXP PAL코드와 DEC OSF/1 PAL코드는 3단계 트리 구조의 페이지 테이블을 탐색한다. 주소는 다음과 같이 나뉜다.
- 사용되지 않는 비트 집합 (트리의 루트 레벨에 대한 인덱스의 최상위 비트와 동일한 값을 포함)
- 트리의 루트 레벨을 인덱싱하는 비트 집합
- 트리의 중간 레벨을 인덱싱하는 비트 집합
- 트리의 리프 레벨을 인덱싱하는 비트 집합
- 페이지 내의 바이트를 인덱싱하여 수정 없이 물리적 주소로 통과하는 나머지 비트
필드 크기는 페이지 크기에 따라 다르며, 세 개의 트리 인덱스 필드는 모두 동일한 크기이다.[20][21] OpenVMS AXP PAL코드는 사용자, 슈퍼바이저, 실행, 커널 모드에 대해 전체 읽기 및 쓰기 권한 비트를 지원하며, 읽기/쓰기/실행 시 오류 발생 비트도 지원한다.[20] DEC OSF/1 PAL코드는 사용자 및 커널 모드에 대해 전체 읽기 및 쓰기 권한 비트를 지원하며, 읽기/쓰기/실행 시 오류 발생 비트도 지원한다.[21]
6. 5. MIPS
MIPS 아키텍처는 TLB에 1개에서 64개의 항목을 지원하며, TLB 항목 수는 CPU 구성에 따라 달라진다. TLB 항목은 이중으로 구성되어 있으며, 각 항목은 가상 페이지 번호(VPN2)를 두 개의 페이지 프레임 번호(PFN0 또는 PFN1) 중 하나에 매핑한다. 각 TLB 항목은 에서 까지 4의 배수로 자체 페이지 크기를 가질 수 있다.[34]TLB 항목의 각 PFN에는 캐싱 속성, 더티 비트, 유효 상태 비트가 포함되어 있다. VPN2는 전역 상태 비트와 운영체제(OS)에서 할당한 ID를 가지며, 전역 상태 비트가 0으로 설정된 경우 가상 주소 TLB 항목 일치에 참여한다.[34]
TLB와 관련하여 발생할 수 있는 예외는 다음과 같다.
- TLB 재충전 예외: 매핑된 가상 주소와 일치하는 항목이 TLB에 없을 때 발생한다.
- TLB 무효 예외: 일치하는 항목이 있지만 무효로 표시된 경우 발생한다.
- TLB 수정 예외: 저장 명령어가 매핑된 주소를 참조하고, 일치하는 항목의 더티 상태가 설정되지 않은 경우 발생한다.
TLB 예외를 처리하는 동안 TLB 예외가 발생하면 이중 오류 TLB 예외가 자체 예외 처리기로 전송된다.
MIPS32 및 MIPS32r2는 32비트 가상 주소 공간과 최대 36비트 물리적 주소 공간을 지원한다. MIPS64는 최대 64비트 가상 주소 공간과 최대 59비트 물리적 주소 공간을 지원한다.
MIPS 아키텍처의 MMU는 실질적으로 TLB의 기능만 담당하며, OS가 직접 TLB를 수정하도록 되어 있다.[34] 페이지 테이블의 구조는 규정되어 있지 않으므로, OS는 TLB 미스에 기인하는 페이지 폴트의 페널티를 줄이는 조건 하에서 OS 자체의 메모리 모델에 최적화된 페이지 테이블 설계를 채택할 수 있다. 또한, TLB 항목에서 OS의 프로세스(실질적으로는 주소 공간)를 가져오기 위한 지원 기능이 처음부터 지원되고 있다.[34]
6. 6. Sun MMU
Sun-1은 1982년에 출시된 모토로라 68000 마이크로프로세서를 기반으로 제작된 싱글 보드 컴퓨터이다. CPU에서 실행되는 여러 프로세스에 대한 주소 변환, 메모리 보호, 메모리 공유 및 메모리 할당을 제공하는 Sun 1 메모리 관리 장치(MMU)를 포함하고 있다. CPU가 개인 온보드 RAM, 외부 Multibus 메모리, 온보드 I/O 및 Multibus I/O에 액세스하는 모든 것은 MMU를 통과하며, 여기서 주소 변환 및 보호가 일관된 방식으로 수행된다. MMU는 CPU 보드에서 하드웨어로 구현된다.MMU는 컨텍스트 레지스터, 세그먼트 맵 및 페이지 맵으로 구성된다. CPU의 가상 주소는 세그먼트 맵에 의해 중간 주소로 변환된 다음 페이지 맵에 의해 물리적 주소로 변환된다. 페이지 크기는 이고 세그먼트 크기는 이며, 이는 세그먼트당 16개의 페이지를 제공한다. 최대 16개의 컨텍스트를 동시에 매핑할 수 있다. 컨텍스트의 최대 논리 주소 공간은 또는 이다. 동시에 매핑할 수 있는 최대 물리적 주소도 이다.
컨텍스트 레지스터는 모든 변환 상태 정보를 다시 로드하지 않고 CPU가 프로세스 간에 전환할 수 있도록 하기 때문에 멀티태스킹 운영 체제에서 중요하다. 4비트 컨텍스트 레지스터는 슈퍼바이저 제어 하에 세그먼트 맵의 16개 섹션 간에 전환할 수 있으며, 이를 통해 16개의 컨텍스트를 동시에 매핑할 수 있다. 각 컨텍스트는 자체 가상 주소 공간을 가진다. 다른 컨텍스트의 세그먼트 또는 페이지 맵에 동일한 값을 기록하여 가상 주소 공간 공유 및 컨텍스트 간 통신을 제공할 수 있다. 세그먼트 맵을 컨텍스트 캐시로 취급하고 가장 최근에 사용된 컨텍스트를 교체하여 추가 컨텍스트를 처리할 수 있다.
컨텍스트 레지스터는 사용자 상태와 슈퍼바이저 상태를 구분하지 않는다. 인터럽트 및 트랩은 컨텍스트를 전환하지 않으므로 모든 유효한 인터럽트 벡터가 컨텍스트의 페이지 0과 유효한 슈퍼바이저 스택에 항상 매핑되어야 한다.[23]
Sun-2 워크스테이션은 모토로라 68010 마이크로프로세서를 기반으로 제작되었으며 페이지와 세그먼트가 있는 유사한 메모리 관리 장치가 있다. 컨텍스트 레지스터에는 슈퍼바이저 상태에서 사용되는 3비트 시스템 컨텍스트와 사용자 상태에서 사용되는 3비트 사용자 컨텍스트가 있다.[24]
Sun-3 워크스테이션은 Sun-3/80, Sun-3/460, Sun-3/470 및 Sun-3/480을 제외하고 모토로라 68020을 기반으로 제작되었으며 유사한 메모리 관리 장치가 있다. 페이지 크기가 로 증가했다. (후기 모델은 모토로라 68030을 기반으로 제작되었으며 68030의 온칩 MMU를 사용한다.)
Sun-4 워크스테이션은 다양한 SPARC 마이크로프로세서를 기반으로 제작되었으며 Sun-3 워크스테이션과 유사한 메모리 관리 장치를 가지고 있다.
6. 7. PowerPC
페이지는 일반적으로 4KiB이다. TLB 미스가 발생하면 표준 PowerPC MMU는 두 번의 참조를 동시에 수행한다. 하나는 데이터와 코드별로 4개 또는 8개 있는 Block Address Translation(BAT) 레지스터가 가리키는 주소 범위인지 참조하는 것이다. BAT 레지스터는 최대 256MiB의 연속적인 메모리를 매핑하며, OS가 커널 자체를 매핑하는 데 자주 사용된다. BAT 참조가 성공하면 다른 참조는 중단되고 무시된다.[16]다른 참조는 모든 프로세서에서 지원되는 것은 아니지만, 역 페이지 테이블을 참조한다. 먼저, 가상 주소의 상위 4비트로 16개의 세그먼트 레지스터 중 하나를 선택한다. 세그먼트 레지스터에 있는 24비트 값을 가상 주소의 상위 4비트와 교체하여 52비트 주소를 생성한다. 세그먼트 레지스터를 사용하면 여러 프로세스가 하나의 해시 테이블을 사용할 수 있다.[16]
52비트 주소는 해시되어 칩 외부 테이블의 인덱스로 사용된다. 여기서 8개의 페이지 테이블 엔트리가 일치하는지 확인한다. 해시 충돌로 인해 일치하는 항목을 찾을 수 없으면 프로세서는 해시 함수를 약간 변경하여 다시 시도한다. 그래도 일치하는 항목을 찾을 수 없으면 CPU는 (MMU를 비활성화한 다음) OS에 예외(트랩)를 통지하고 처리를 요청한다. OS는 해시 테이블에서 하나의 엔트리를 삭제하여 공간을 만들고 새로운 엔트리를 그곳에 넣는다. 새로운 엔트리는 일반적인 트리 구조의 페이지 테이블을 참조하여 얻는 방식도 있고, 속도는 느리지만 메모리 효율이 좋은 방법으로 더 근본적인 메모리 관리 데이터 구조를 따라 얻는 경우도 있다. NX 비트 제어 지원은 세그먼트 레지스터에서 수행되므로 256MiB 단위가 된다.[16]
이 방식의 문제는 해시 함수를 사용하기 때문에 캐시의 지역성이 떨어진다는 점이다. 트리 구조의 페이지 테이블에서는 가상 주소상 가까운 엔트리가 가까운 위치에 배치된다. PowerPC에서의 OS는 이 문제의 영향을 줄이기 위해 가능한 한 해시 테이블의 크기를 작게 유지해야 한다.[16]
6. 8. IA-32 / x86
CPU는 기본적으로 메모리를 4KB 페이지로 나눈다. 구형 8088 및 80286 MMU 설계의 기본 요소였던 세그먼트 레지스터는 최신 OS에서는 사용되지 않지만, 예외적으로 FS 및 GS 레지스터가 애플리케이션의 스레드별 데이터 또는 OS 커널의 CPU별 데이터 접근에 사용된다. 모든 메모리 접근은 실행 중인 코드에 따라 선택된 세그먼트 레지스터를 포함한다. 세그먼트 레지스터는 가상 주소에 더해질 오프셋을 제공하는 테이블의 색인 역할을 한다. OS는 FS 또는 GS를 사용하는 경우를 제외하고 오프셋이 0이 되도록 보장한다.[16]오프셋이 추가된 후 주소는 32비트를 초과하지 않도록 마스크된다. 결과는 트리 구조 페이지 테이블을 통해 조회되며, 주소 비트는 트리의 분기에 10비트, 분기의 리프에 10비트, 가장 낮은 12비트는 결과에 직접 복사되는 방식으로 분할된다. W^X 기능을 갖춘 OpenBSD 및 Exec Shield 또는 PaX 패치가 적용된 Linux와 같은 일부 운영 체제는 CS 레지스터에 의해 지정된 코드 세그먼트의 길이를 제한하여 주소 공간의 수정 가능한 영역에서 코드 실행을 허용하지 않을 수도 있다.
펜티엄 MMU는 트리의 최하위 레벨을 건너뛰어 4MB 페이지를 허용하도록 변경되었다. 페이지 계층 구조의 첫 번째 레벨을 인덱싱하는 데 10비트가 남고 나머지 10+12비트가 결과에 직접 복사된다. 펜티엄 프로 MMU는 물리 주소 확장(PAE) 기능을 도입, 3단계 페이지 테이블에 2+9+9비트를 사용하고 가장 낮은 12비트를 직접 복사하여 36비트 물리 주소를 사용할 수 있게 했다. 2MB 크기의 큰 페이지도 트리의 최하위 레벨을 건너뛰어 사용할 수 있다(2단계 테이블 계층 구조에 2+9비트 사용, 나머지 9+12비트 직접 복사). 또한 페이지 속성 테이블을 통해 작은 CPU 내 테이블에서 몇 개의 높은 비트를 조회하여 캐시 가능성을 지정할 수 있다.
실행 불가 지원은 원래 세그먼트별로만 제공되어 사용하기 불편했다. 최신 x86 칩은 PAE 모드에서 페이지별 실행 불가 비트를 제공한다. W^X, Exec Shield, PaX 메커니즘은 NX 비트가 없는 x86 프로세서에서 코드 세그먼트 길이를 설정하여 페이지별 실행 불가 지원을 에뮬레이션하며, 이로 인해 성능 저하와 사용 가능한 주소 공간 감소가 발생한다.[17]
6. 9. x86-64
x86-64는 x86의 64비트 확장으로, 세그먼테이션을 거의 완전히 제거하고 플랫 메모리 모델을 사용한다. FS와 GS 세그먼트 레지스터를 제외한 나머지 세그먼트 레지스터는 오프셋이 0으로 설정되어 무시된다.[17]페이지 테이블은 4단계로 구성된다. 상위 비트부터 16비트는 미사용, 9비트씩 각 계층의 인덱스, 나머지 12비트는 물리 주소의 하위 12비트가 된다. 미사용 16비트는 하위 48비트를 부호 확장한 것이다. 4KB 페이지를 사용하는 경우 4단계 페이지 테이블을 사용하며, 2MB 페이지를 사용하는 경우에는 3단계, 1GB 페이지를 사용하는 경우에는 2단계 페이징을 사용할 수 있다. 페이지 테이블 항목에는 NX 비트가 지원된다.[16]
7. 대안
Burroughs B5000은 가상 메모리를 지원하는 최초의 상용 시스템 중 하나였으며(Atlas 이후), 외부 MMU가 필요하지 않았다.[26] B5000과 현재의 Unisys ClearPath MCP (Libra) 시스템은 가상 메모리 주소와 메모리 보호 기능을 다른 아키텍처 방식으로 제공한다. 가상 메모리를 위해 설계되지 않은 프로세서에 가상 메모리를 추가하는 대신, 프로세서/시스템의 핵심 설계에 통합하여 주소 변환 또는 경계 검사 기능을 추가하기 위한 외부 장치가 필요하지 않아 메모리 안전성과 보안을 제공한다.
B5000 시리즈는 디스크립터 기반이다.[27][28] 48비트 메모리 워드의 최상위 비트는 해당 워드가 사용자 데이터인지 디스크립터/제어 워드인지를 나타낸다. 디스크립터는 사용자 프로세스에서 읽기 전용이며 시스템(하드웨어 또는 운영 체제)에 의해서만 업데이트될 수 있었다. B6x00/B7x00/B5900/A-series/Unisys MCP 시스템의 메모리 워드는 48개의 데이터 비트와 3개의 태그 비트를 가지며(최신 시스템은 4개의 태그 비트를 가짐), 태그가 홀수인 워드는 사용자 프로세스에서 읽기 전용이다. 디스크립터는 태그 5를, 코드 워드는 태그 3을 가진다.
할당된 각 메모리 블록에는 해당 블록의 속성(물리적 주소, 크기, 주 메모리에 있는지 여부)을 가진 마스터 디스크립터가 제공된다. 모든 메모리 할당은 완전히 자동화되어 있으며(현대 시스템의 특징 중 하나[31]), 이 메커니즘 외에 블록을 할당하는 방법은 없다. malloc 또는 dealloc과 같은 호출은 없는데, 메모리 블록이 pbit 인터럽트 또는 폐기 시에도 자동으로 할당되기 때문이다.
모든 접근이 디스크립터를 통해 이루어지므로, 하드웨어는 모든 접근이 경계 내에 있는지, 쓰기의 경우 프로세스에 쓰기 권한이 있는지 확인할 수 있다. MCP 시스템은 본질적으로 안전하므로, 이 수준의 메모리 보호를 제공하기 위해 MMU가 필요하지 않다. 블록은 프로세스 스택의 복사 디스크립터를 통해 프로세스 간에 공유될 수 있다. 따라서 일부 프로세스에는 쓰기 권한이 있을 수 있지만, 다른 프로세스에는 없을 수 있다. 코드 세그먼트는 읽기 전용이므로, 재진입 가능하며 프로세스 간에 공유된다.
8. CPU 외의 활용
PCI 장치 등 버스 마스터로서 메모리에 접근하는 장치나 DMA를 사용하는 경우, 아키텍처 설계 시 장치나 DMA에 물리 주소와 가상 주소 중 어느 것을 보여줄지 선택해야 한다. 가상 주소를 선택한 경우 장치나 DMA에 의한 메모리 접근도 MMU에 의한 주소 변환 대상이 되며, MMU로 실현하는 가상 메모리 기능의 장점 및 단점이 장치나 DMA에도 거의 그대로 적용된다.
예를 들어, 장치의 사양상 페이지 크기보다 큰 연속된 메모리가 필요한 경우, 물리 주소에 의한 접근에서는 실제로 연속된 물리 메모리의 확보가 필요하지만, 가상 주소에 의한 접근이라면 물리적으로는 흩어져 있는 메모리를 MMU를 통해 연속된 메모리로 장치에 보여줄 수 있다. 한편, 장치에 의한 메모리 접근으로 인해 페이지 폴트가 발생한 경우, 운영 체제가 처리해야 한다.[1]
참조
[1]
FOLDOC
Memory Management Unit
[2]
서적
Modern operating systems
Prentice-Hall
[3]
웹사이트
Lecture 7: Memory Management
http://cseweb.ucsd.e[...]
UC San Diego
2013-12-04
[4]
서적
Spectra 70 70-46 Processor Manual
http://bitsavers.tra[...]
RCA
2013-08-15
[5]
서적
Reference Manual, SDS 940 Computer
http://bitsavers.org[...]
Scientific Data Systems
1966-01-01
[6]
서적
Hardware Engineering Manual for the 2060 CPU Board
http://bitsavers.org[...]
Sun Microsystems
1987-05-10
[7]
FOLDOC
[8]
웹사이트
Z8010 Z8000 MMU Memory Management Unit Product Specification
http://www.bitsavers[...]
Zilog
1985-04-01
[9]
웹사이트
1983/84 Data Book
http://www.bitsavers[...]
Zilog
2021-04-27
[10]
잡지
Virtual Memory for Microcomputers
https://archive.org/[...]
1983-04-01
[11]
잡지
Memory Management Units For 68000 Architectures
http://marc.retronik[...]
1986-11-01
[12]
서적
MultiFinder User's Guide
Apple
1987-01-01
[13]
기술 보고서
Memory Address Decoding
https://ece-research[...]
University of New Mexico
1996-01-01
[14]
웹사이트
A Retrospective on What We Have Learned From the PDP-11
https://gordonbell.a[...]
[15]
기술 보고서
MCU, Memory Control Unit, FREDDIE
Atari
1983-01-01
[16]
웹사이트
IBM Archives: System/360 Dates and characteristics
http://www-03.ibm.co[...]
2017-05-03
[17]
웹사이트
IBM System/360 Model 67 Functional Characteristics, Third Edition
http://www.bitsavers[...]
2021-10-29
[18]
서적
VAX Architecture Reference Manual
http://bitsavers.org[...]
Digital Equipment Corporation
1987-01-01
[19]
웹사이트
Cortex-A8 Technical Reference Manual
http://infocenter.ar[...]
2017-05-03
[20]
서적
Alpha AXP Architecture
http://bitsavers.org[...]
Digital Press
[21]
서적
Alpha AXP Architecture
http://bitsavers.org[...]
Digital Press
[22]
서적
Alpha AXP Architecture
http://bitsavers.org[...]
Digital Press
[23]
문서
Sun 68000 Board User's Manual
Sun Microsystems, Inc
1983-02-01
[24]
웹사이트
Sun-2 Architecture Manual
http://bitsavers.org[...]
Sun Microsystems
1983-12-15
[25]
웹사이트
AMD64 Architecture Programmer's Manual Volume 2: System Programming
http://support.amd.c[...]
2017-12-05
[26]
학술지
Can We Make Operating Systems Reliable and Secure?
https://www.computer[...]
2006-05-01
[27]
웹사이트
The Descriptor
http://www.bitsavers[...]
[28]
웹사이트
Unisys Descriptor
https://public.suppo[...]
[29]
웹사이트
Pbits
https://public.suppo[...]
[30]
웹사이트
Pbit interrupt
https://public.suppo[...]
[31]
잡지
Design Principles Behind Smalltalk
http://users.ipa.net[...]
1981-08-01
[32]
서적
Modern operating systems
Prentice-Hall
[33]
웹사이트
Cortex-A8 Technical Reference Manual
http://infocenter.ar[...]
[34]
문서
1988년 R3000부터, x86-64는 2008년에 유사 기능 채택
[35]
서적
Modern operating systems
Prentice-Hall
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com